﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using JeuDeDames;


namespace JeuDeDames
{
    public class Pion : Piece
    {
        public Pion(int position, Joueur joueur) : this(position, joueur, false)
        {

        }

        public Pion(int position, Joueur joueur, bool peutBouger)
        {
            this.couleur = joueur.couleur;
            this.position = position;
            this.joueur = joueur;
            pion = true;
        } // constructeur

        public override bool estDeplaceable(CaseNoire caseDestination)
        {
            if (couleur * (caseDestination.position - position) == 11 || couleur * (caseDestination.position - position) == 13)  /*Si la case est une des deux cases possibles*/
            {
                if (caseDestination.estVide())   /*Si la case est vide*/
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            else
            {
                return false;
            }
        } // estDeplaceable()

        public override string ToString()
        {
            if (couleur == -1)
            {
                return "x";
            }
            else
            {
                return "o";
            }
        } // ToString()


        public void seDeplacer(Coup coup)
        {
            coup.origine.piece.position = coup.destination.position;
            coup.destination.piece = coup.origine.piece;
            coup.origine.piece = null;
        } // seDeplacer()

        public override int direction(CaseNoire caseDestination)
        {
            if (this.couleur == NOIR)
            {
                return caseDestination.position - this.position;
            }
            else if (this.couleur == BLANC)
            {
                return this.position - caseDestination.position;
            }
            else
                return 0;
        } // direction()

        //TODO
         /**
         * @param : coup représente la case d'arrivée et de départ
         * */
        public override void mange(Coup coup)
        {
            (Damier.damier[this.caseAManger(coup.destination)] as CaseNoire).piece.joueur.lesPieces.Remove((Damier.damier[this.caseAManger(coup.destination)] as CaseNoire).piece);
            /*supprime la pièce de la case destination*/
            (Damier.damier[this.caseAManger(coup.destination)] as CaseNoire).piece = null;
            coup.origine.piece.position = coup.destination.position;
            coup.destination.piece = coup.origine.piece;
            coup.origine.piece = null;
        } //mange()

        /**
         * deplacementOuMangeage test si le coup en paramètre est un déplacement sans prise ou avec prise.
         * @return : 1 si déplacement sans prise || 2 si déplacement avec prise || 0 sinon.
         * */
        public override int deplacementOuMangeage(CaseNoire origine, CaseNoire destination)
        {
            if (this.estDeplaceable(destination)) //Si le coup est un déplacement
            {
                return 1;
            }
            else if (this.estMangeable(destination))   //Si le coup mange un pion
            {
                return 2;
            }
            else return 0; //ni déplacement, ni mangeage, coup non légal
        }

        public override bool estMangeable(CaseNoire destination)
        {
            if (destination.estVide() && (Damier.damier[this.caseAManger(destination)] is CaseNoire))
            {
                if (!(Damier.damier[this.caseAManger(destination)] as CaseNoire).estVide())
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            else
            {
                return false;
            }
        } //estMangeable()

        public override int caseAManger(CaseNoire destination)
        {
            if (this.couleur == NOIR)
            {
                return this.position + ((destination.position - this.position) / 2); //retourne la valeur de la case à manger
            }
            else //caseblanche
            {
                return this.position - ((this.position - destination.position) / 2); //retourne la valeur de la case à manger
            }
        } //caseAManger()


        
    }
}
